package com.asiainfo.lop.util;

import com.asiainfo.lop.os.InitParam;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * @author : wucm
 * @version V1.0
 * @Description :
 * @date : 2015年8月24日 下午4:51:32
 */
public class CryptionUtil {
    /**
     * @param param
     * @return String
     * @Description : 加密
     * @author : wucm
     * @date : 2015年8月24日 下午4:52:54
     */
    public static String encrypt(String param) {
        if (null == param) {
            return param;
        }

        String str = param;
        switch (InitParam.CRYPTION_TYPE) {
            case "base64": {
                str = Base64.encode(param);
                break;
            }
            case "md5": {
                str = MD5.encode16(param);
                break;
            }
            case "mix": {
                str = Base64.encode(param);
                str = MD5.encode16(str);
                break;
            }
        }
        return str;
    }

    /**
     * @param param
     * @return String
     * @Description : 解密
     * @author : wucm
     * @date : 2015年8月24日 下午4:53:01
     */
    public static String decrypt(String param) {
        if (null == param) {
            return param;
        }

        String str = param;
        switch (InitParam.CRYPTION_TYPE) {
            case "base64": {
                str = Base64.decode(param);
                break;
            }
            case "md5": {
                break;
            }
            case "mix": {
                break;
            }
        }
        return str;
    }

    /**
     * @param param
     * @return String
     * @Description : 加密（不可逆，先base64加密，再md5加密）
     * @author : wucm
     * @date : 2015年8月24日 下午4:52:54
     */
    public static String encryptMix(String param) {
        if (null == param) {
            return param;
        }

        param = Base64.encode(param);
        param = MD5.encode16(param);
        return param;
    }

    /**
     * @return String
     * @Description : 加密网络数据
     * @author : wucm
     * @date : 2016年5月27日 下午4:51:52
     */
    public static String encryptWebParam(String param) {
        if (null == param) {
            return param;
        }

        try {
            param = URLEncoder.encode(param, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        param = Base64.encode(param);
        return param;
    }

    /**
     * @return String
     * @Description : 解密网络数据
     * @author : wucm
     * @date : 2016年5月27日 下午4:51:52
     */
    public static String decryptWebParam(String param) {
        if (null == param) {
            return param;
        }

        param = Base64.decode(param);
        try {
            param = URLDecoder.decode(param, "UTF-8");
        } catch (Exception e) {
            System.err.println(e);
        }
        return param;
    }

    /**
     * @param args
     * @return void
     * @Description :
     * @author : wucm
     * @date : 2015年8月24日 下午4:51:32
     */
    public static void main(String[] args) {
        System.out.println(encryptMix("zhy123!@#"));
        System.out.println(encryptMix("dtkl@1234"));
    }

}
